package co.sumset.dao;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.PrintWriter;
import java.util.ArrayList;

import co.sumset.entidades.Usuario;
import co.sumset.interfaces.InterfazDAOUsuario;


/**
 * Esta clase es la encargada de leer y escribir 
 * sobre el archivo de texto que almacena los 
 * datos de los usuarios.
 * 
 * @author Cristian Raul Pineda Rodriguez
 *
 */
public class DaoUsuario implements InterfazDAOUsuario
{

	// Esta es la ruta en donde se encuentra el archivo de texto
	public static final String RUTA=System.getProperty("user.dir")+"/src/co/sumset/persistencia/usuario.txt";

	/**
	 * Metodo que permite agregar la iformacion de  un objeto Usuario al archivo txt.
	 * 
	 * @see co.sumset.interfaces.InterfazDAOUsuario#crearUsuario(co.sumset.entidades.Usuario)
	 */
	@Override
	public void crearUsuario(Usuario miUsuario) throws Exception
	{
		FileWriter escritor = new FileWriter(RUTA,true);
		PrintWriter salida=new PrintWriter(escritor);
		String linea = miUsuario.toString();
		salida.print("");
		salida.println(linea);
		salida.close(); 
	}
	
	/**
	 * Metodo que permite listar todos los usuarios que contiene el archivo txt.
	 * 
	 * @see co.sumset.interfaces.InterfazDAOUsuario#listarUsuarios()
	 * @return Una Lista con instacias de la Clase Usuario.
	 */
	@Override
	public ArrayList<Usuario> listarUsuarios() throws Exception 
	{
		ArrayList<Usuario> misUsuarios=new ArrayList<Usuario>();
		BufferedReader entrada=new BufferedReader(new FileReader(RUTA));

		String linea=null;
		while((linea=entrada.readLine())!=null)
		{
			String datos[]=linea.split(",");


			String clave=datos[0];
			String nombre=datos[1];
			String correo=datos[2];
			Usuario miUsuario= new Usuario(clave, nombre, correo);				
			misUsuarios.add(miUsuario);

		}
		return misUsuarios;
	}


	/**
	 * Metodo que permite buscar un usuario por su clave
	 * 
	 * @see co.sumset.interfaces.InterfazDAOUsuario#buscarPorClave(java.lang.String)
	 * @return Una instacia de la Clase Usuario.
	 */
	@Override
	public Usuario buscarPorClave(String clave) throws Exception 
	{
		ArrayList<Usuario> usuarios=listarUsuarios();
		Usuario encontrado=null;

		for (int i = 0; i < usuarios.size(); i++) 
		{
			if(clave.equalsIgnoreCase(usuarios.get(i).getClave()))
			{
				encontrado=usuarios.get(i);
				break;
			}
		}
		return encontrado;

	}

	/**
	 * Metodo que permite buscar un usuario por su correo
	 * 
	 * @see co.sumset.interfaces.InterfazDAOUsuario#buscarPorCorreo(java.lang.String)
	 * @return Una instacia de la Clase Usuario.
	 */
	@Override
	public Usuario buscarPorCorreo(String correo) throws Exception 
	{
		ArrayList<Usuario> usuarios=listarUsuarios();
		Usuario encontrado=null;
		if (usuarios!=null) {
			for (int i = 0; i < usuarios.size(); i++) 
			{
				if(correo.equalsIgnoreCase(usuarios.get(i).getCorreo()))
				{
					encontrado=usuarios.get(i);
					break;
				}
			}
		}

		return encontrado;
	}
}
